#include <bits/stdc++.h>

using namespace std;

const int MAXN = 4e4+10;
const int MAXS = 1<<22;

int pos[22],tot,n,m,k,a[MAXN],f[22][22],dis[MAXN],g[MAXS],b[MAXN];
int p[22];
bool vis[MAXN];

void upd(int &x,int y){x = x < y ? x : y;}

void dijk(int d){
	memset(dis,0x3f,sizeof(dis));
	dis[pos[d]] = 0;
	queue<int> q;
	q.push(pos[d]);
	while(q.size()){
		int x = q.front();q.pop();
		vis[x] = 0;
		for(int i = 1;i <= m;i++) {
			if(x + b[i] <= n+1 && dis[x + b[i]] > dis[x] + 1){
				dis[x + b[i]] = dis[x] + 1;
				if(!vis[x+b[i]]){
					q.push(x+b[i]);
					vis[x+b[i]] = 1;
				}
			}
			if(x - b[i] > 0 && dis[x - b[i]] > dis[x] + 1){
				dis[x - b[i]] = dis[x] + 1;
				if(!vis[x-b[i]]){
					q.push(x-b[i]);
					vis[x-b[i]] = 1;
				}
			}
		}
	}
	for(int i = 0;i < tot;i++) f[d][i] = dis[pos[i]];
}

int main (){
	scanf("%d %d %d",&n,&k,&m);
	for(int i = 1;i <= k;i++){
		int x;scanf("%d",&x);
		a[x] ^= 1; a[x+1] ^= 1;
	}
	for(int i = 1;i <= m;i++) scanf("%d",&b[i]);
	for(int i = 1;i <= n+1;i++) if(a[i]) pos[tot++] = i;
	for(int i = 0;i < tot;i++) dijk(i);
	p[0] = 1;
	for(int i = 1;i < tot;i++) p[i] = p[i-1]<<1;
	int ful = (1<<tot)-1;
	memset(g,0x3f,sizeof(g));
	g[0] = 0;
	for(int s = 0;s < ful;s++)
		for(int i = 0;i < tot;i++)
			if(!(s>>i&1))
				for(int j = i+1;j < tot;j++)
					if(!(s>>j&1))
						upd(g[s | p[i] | p[j]],g[s] + f[i][j]);
	if(g[ful] >= 0x3f3f3f3f) g[ful] = -1;
	printf("%d\n",g[ful]);
	return 0;
}
